package com.github.common.extend.demo.config.filetask;

import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 文件存储器
 * @author wangjj7
 * @date 2023/8/16
 * @description
 */
public interface FileStorage {

    /**
     * 保存
     * @param fileCreate 文件创建参数
     * @return 文件的唯一标识
     */
    FileInfo save(FileInfoParam fileCreate);

    /**
     * 延长过期时间
     * @param id
     * @param expiredTime
     */
    boolean overtimeExpiredTime(String id ,LocalDateTime expiredTime);

    /**
     * 通过文件的唯一标识获取文件流
     * @param id
     * @return
     */
    InputStream loadFileStream(String id);

    /**
     * 文件删除
     * @param id
     */
    void delete(String id);

    /**
     * 获取文件信息
     * @param id
     * @return
     */
    FileInfo get(String id);

    /**
     * 批量获取文件信息
     * @param ids
     * @return
     */
    default List<FileInfo> get(Collection<String> ids)
    {
        return ids.stream()
                .map(this::get)
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
    }

    /**
     * 批量获取文件信息
     * @param ids
     * @return
     */
    default List<FileInfo> get(String[] ids)
    {
        return get(Stream.of(ids).collect(Collectors.toList()));
    }

}
